package com.osdp.auth.server;

import com.osdp.sc.dto.PermissionDTO;
import com.osdp.sc.dto.TenantUserDTO;
import com.osdp.uc.dto.UserDTO;

import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * 登录服务所有接口
 */
public interface IUserService {

    /**
     * 根据用户名查询用户，用于用户登录
     * @param userName String
     * @return UserVo
     */
    UserDTO queryUserByUserName(String userName);


    /**
     * 根据用户ID查询对应的角色id
     * @param userId
     * @return
     */
    List<String> queryRoleIdByUserId(String userId);

    /**
     * 根据用户ID得到租户ID
     * @param userId
     * @return
     */
    List<TenantUserDTO> queryTenantByUserId(String userId);

    /**
     * 获取与与租户编码一致的租户id
     *
     * @param tenants
     * @param tenantCode
     * @return
     */
    String getCurrentTenantId(List<TenantUserDTO> tenants, String tenantCode);

    /**
     * 获取租户id数组
     *
     * @param tenants List<TenantUserVo>
     * @return List<String>
     */
    List<String> getTenantIds(List<TenantUserDTO> tenants);

    /**
     * 根据用户ID查询角色编码
     * @param userId
     * @return
     */
    List<String> getRoleCodeByUserId(String userId);

    /**
     * 是否是超级管理员
     * @param roleCodes List<String>
     * @return boolean
     */
    boolean hasSuperAdmin(List<String> roleCodes);

    /**
     * 查询所有按钮资源
     * @return List<PermissionVo>
     */
    List<PermissionDTO> queryPermissionButtonByUserId(String userId);

    /**
     * 查询API权限集合
     * @param userId String 用户ID
     * @return List<PermissionVo>
     */
    List<PermissionDTO> queryPermissionAPIByUserId(String userId);

    /**
     * 查询所有按钮与API资源
     * @param url
     * @param method String 包括(GET,PUT,DELETE,POST,PATCH)
     * @return
     */
    /**
     * 根据角色编码查询所有按钮与API资源
     * @param roleCodes Set<String>
     * @param tenantId String
     * @return Optional<List<PermissionDTO>>
     */
    Optional<List<PermissionDTO>> queryPermsButtonAndAPIByRoleCode(Set<String> roleCodes, String tenantId);
}
